package openbang.chatroom.service.intf;

import java.util.List;
import java.util.Set;

import openbang.chatroom.service.vo.ChatGroup;
import openbang.chatroom.service.vo.ChatMsg;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.google.gwt.user.client.rpc.ServiceDefTarget;

/**
 * 聊天服务
 * 不必登录
 * @author aibo zeng
 *
 */

@RemoteServiceRelativePath("msgService")
public interface ChatService extends RemoteService{
	
	/**
	 * 取已经存在的所有聊天组
	 * @return
	 */
	public List<ChatGroup> getAllGroup();

	/**
	 * 建新组
	 * @param chatGroup
	 * @return OK+groupId ,ER+错误码
	 */
	public String createGroup(ChatGroup chatGroup);
	
	public Integer deleteGroup(String groupId );

	public Integer joinGroup(String groupId , String participant , String password);
	
	/**
	 * 退出聊天
	 * @param groupId
	 * @param participant
	 * @return
	 */
	public Integer quitGroup(String groupId , String participant );
	
	/**
	 * 取群基本信息 （不含参与者）     第一次  
	 * @param groupId
	 * @return
	 */
	public ChatGroup getChatGroup(String groupId);
	
	/**
	 * 取参与者  定时取
	 * @param groupId
	 * @return
	 */
	public Set<String> getParticipants(String groupId);
	
	/**
	 * 取当前聊天者还没有看到的其他人的消息 --定时取
	 * @param groupId
	 * @param token
	 * @return
	 */
	public List<ChatMsg> getNewChatMsg(String groupId,String token,String participant);
	
	/**
	 * 发新消息
	 * @param groupId
	 * @param participant
	 */
	public Integer sendMsg(String groupId,String participant, String msg);
	
    /* @RemoteServiceRelativePath相当于以下用法
     */
    public static class Util {
		private static ChatServiceAsync instance;
		public static ChatServiceAsync getInstance(){
			if (instance == null) {
				instance = (ChatServiceAsync) GWT.create(ChatService.class);
				ServiceDefTarget target = (ServiceDefTarget) instance;
				target.setServiceEntryPoint("/chatService");//GWT.getModuleBaseURL() 
			}
			return instance;
		}
	} 
	   //msgService 必须在 web.xml中声明	
}
